'''
作用:
在某个qq群里@一批人

安装依赖
pip install pywin32

使用
import qq_auto_at as qqat

qqat.start(qqqun_name, userlist, separator,prefix,sleep_time)
其中qqqun_name是qq群的名称，要将qq单独分离出一个出口
separator为分隔符
userlist请按'@某人分隔符@某人分隔符@某人'的格式传入，'分隔符'后可带'\n'
prefix为再@列表前的说明消息，默认为""
sleep_time为间隔时间，默认为0.2，可以不传，有问题可以适当调大
'''

from time import sleep
import win32gui
import win32con
import win32clipboard

# 窗口配置
window_name = 'BotTest'
sleep_space = 0.2

# 枚举窗口
hwnd_title = dict()


def get_all_hwnd(hwnd, mouse):
    if win32gui.IsWindow(hwnd) and\
            win32gui.IsWindowEnabled(hwnd) and\
            win32gui.IsWindowVisible(hwnd):
        hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)})

# 自动粘贴函数


def auto_at(prefix: str, text_list: list):
    input('\n准备自动粘贴，请保证聊天窗口已打开且光标正处于输入框内。按回车键继续\n')
    win32gui.EnumWindows(get_all_hwnd, 0)
    # print(hwnd_title)
    for h, t in hwnd_title.items():
        if t.find(window_name) == 0:
            # 粘贴前缀
            win32clipboard.OpenClipboard()
            win32clipboard.EmptyClipboard()
            win32clipboard.SetClipboardData(
                win32con.CF_UNICODETEXT, prefix + '\n')
            win32clipboard.CloseClipboard()
            win32gui.SendMessage(h, win32con.WM_PASTE, 0, 0)
            for text in text_list:
                win32clipboard.OpenClipboard()
                win32clipboard.EmptyClipboard()
                win32clipboard.SetClipboardData(win32con.CF_UNICODETEXT, text)
                win32clipboard.CloseClipboard()
                win32gui.SendMessage(h, win32con.WM_PASTE, 0, 0)
                sleep(sleep_space)
                win32gui.SendMessage(
                    h, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
                sleep(sleep_space)
                win32gui.SendMessage(
                    h, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
                sleep(sleep_space)


# Demo
def start(qqqun_name: str, userlist: str, separator: str, prefix: str = "",
          sleep_time: float = 0.2):
    global window_name
    window_name = qqqun_name
    global sleep_space
    sleep_space = sleep_time
    tl = userlist.split(separator)
    ll = len(tl)
    i = 0
    while(i < ll):
        if i != 0:
            print('接上条消息')
        j = i+20 if i+20 < ll else ll-1
        auto_at(prefix, tl[i:j])
        prefix = '接上条消息'
        i = i+20
